package com.memora.seguranca

import org.apache.commons.lang.builder.HashCodeBuilder

class SegUserSegRole implements Serializable {

	private static final long serialVersionUID = 1

	SegUser segUser
	SegRole segRole

	boolean equals(other) {
		if (!(other instanceof SegUserSegRole)) {
			return false
		}

		other.segUser?.id == segUser?.id &&
			other.segRole?.id == segRole?.id
	}

	int hashCode() {
		def builder = new HashCodeBuilder()
		if (segUser) builder.append(segUser.id)
		if (segRole) builder.append(segRole.id)
		builder.toHashCode()
	}

	static SegUserSegRole get(long segUserId, long segRoleId) {
		SegUserSegRole.where {
			segUser == SegUser.load(segUserId) &&
			segRole == SegRole.load(segRoleId)
		}.get()
	}

	static SegUserSegRole create(SegUser segUser, SegRole segRole, boolean flush = false) {
		new SegUserSegRole(segUser: segUser, segRole: segRole).save(flush: flush, insert: true)
	}

	static boolean remove(SegUser u, SegRole r, boolean flush = false) {

		int rowCount = SegUserSegRole.where {
			segUser == SegUser.load(u.id) &&
			segRole == SegRole.load(r.id)
		}.deleteAll()

		rowCount > 0
	}

	static void removeAll(SegUser u) {
		SegUserSegRole.where {
			segUser == SegUser.load(u.id)
		}.deleteAll()
	}

	static void removeAll(SegRole r) {
		SegUserSegRole.where {
			segRole == SegRole.load(r.id)
		}.deleteAll()
	}

	static mapping = {
		id composite: ['segRole', 'segUser']
		version false
	}
}
